const {mysql} = require('../../qcloud')

//向order表更新或插入数据
//order表只是用来存放当在购物车选择商品下单时的数据
//第一次如果选择第一个商品，则将信息保存下来
//如果是第二次某个商品，则将该商品信息更新下来，替换之前的数据
//（ cart/cart.vue/orderDown 方法）
async function submitAction (ctx) {
  const { openId } = ctx.request.body
  let goodsId = ctx.request.body.goodsId
  let allPrice = ctx.request.body.allPrice
  // console.log("下单：===",openId,goodsId,allPrice)
  // 是否存在订单
  // 根据用户id查询订单表
  const isOrder = await mysql('nideshop_order').where({
    'user_id': openId
  }).select()
  //如果存在该用户的数据
  if (isOrder.length > 0) {
    //将在订单表更新数据
    const data = await mysql('nideshop_order').where({
      'user_id': openId
    }).update({
      user_id: openId,
      goods_id: goodsId,
      allprice: allPrice
    })
    if (data) {
      ctx.state = {
        data: true
      }
    } else {
      ctx.state = {
        data: false
      }
    }
  } else {
    //如果没有该用户的数据，进行插入数据
    const data = await mysql('nideshop_order').insert({
      user_id: openId,
      goods_id: goodsId,
      allprice: allPrice
    })
    if (data) {
      ctx.state = {
        data: true
      }
    } else {
      ctx.state = {
        data: false
      }
    }
  }
}

//在支付页面获取订单信息，如收获地址、商品信息等（ toOrder/order.vue/getDetail 方法）
async function detailAction(ctx){
  const openId= ctx.query.openId
  const addressId= ctx.query.addressId || ''
  //如果是购物车下单页面
  //从订单表order中取出商品id，拿到购物车表cart中查询，如果有相同的商品id则在cart表 中将数据取出来  
  //连接order表，查询用户id，存在则取出来
  const orderDetail = await mysql('nideshop_order').where({
    'user_id': openId
  }).select()
  //定义goodsIds数组，存放商品id，多条时以逗号切割
  var goodsIds = orderDetail[0].goods_id.split(',')
  //连接购物车表，用该用户的商品id和order表中的商品id相比较,相同则取出来
  //(在执行这之前已经将要下单的商品id存到了order表中)
  const list = await mysql('nideshop_cart').andWhere({
    'user_id': openId
  }).whereIn('goods_id', goodsIds).select()
  // 收货地址
  var addressList;
  //如果前端传过来的地址存在
  if (addressId) {
    addressList = await mysql('nideshop_address').where({
      'user_id': openId,
      'id': addressId
    }).orderBy('is_default', 'desc').select()
  } else {
    addressList = await mysql('nideshop_address').where({
      'user_id': openId
    }).orderBy('is_default', 'desc').select()
  }
  
  ctx.state.data = {
    allprice: orderDetail[0].allprice,
    goodsList: list,
    address: addressList[0] || {}
  }
}

//点击立即购买获取商品信息（ buyOrder/buyOrder.vue/getDetail 方法）
async function buyAction(ctx){
  const {openId,goodsId}= ctx.query
   const addressId= ctx.query.addressId || ''
  // console.log("======",openId,goodsId)
  const buyData = await mysql('nideshop_goods').where({
    'id':goodsId
  }).select()
  
     // 收货地址
  var addressList;
  //如果前端传过来的地址存在
  if (addressId) {
    addressList = await mysql('nideshop_address').where({
      'user_id': openId,
      'id': addressId
    }).orderBy('is_default', 'desc').select()
  } else {
    addressList = await mysql('nideshop_address').where({
      'user_id': openId
    }).orderBy('is_default', 'desc').select()
  }

    ctx.state.data = {
      buyData,
      address: addressList[0] || {}
    }
}

// 购物车支付
async function orderDetail(ctx){ 
  const {openId,orderId,goods,allprice,time,address} = ctx.request.body
   //向总订单表插入用户与订单的id
    const order_data= await mysql('nideshop_orders').insert({
        'user_id': openId,
        'order_id':orderId,
        'allprice':allprice,
        'create_time':time,
        'address':address
    })
   for(let i=0;i<goods.length;i++){
      var goods_id = goods[i].goods_id
      var goods_name=goods[i].goods_name
      var number=goods[i].number
      var retail_price=goods[i].retail_price
      var list_pic_url=goods[i].list_pic_url
      const order_data= await mysql('nideshop_order_goods').insert({
        'order_id':orderId,
        'goods_id': goods_id,
        'goods_name':goods_name,
        'number':number,
        'retail_price':retail_price,
        'list_pic_url':list_pic_url,
      })
   }
   ctx.state = {
      data:true
  }
}

// 历史订单
async function myOrder(ctx){
  const openId= ctx.query.openId
  const orderData = await mysql('nideshop_orders').where({
    'user_id':openId
  }).orderBy('id','desc').select()
  if(orderData){
    var orderId=''
    var list =[]
    for(let i=0;i<orderData.length;i++){
      orderId=orderData[i].order_id
      const goodData = await mysql('nideshop_order_goods').where({
        'order_id':orderId
      }).select()
      list.push(goodData)
    }
    ctx.state.data={
       list,orderData
    }
  }else{
    ctx.state={
      data:false
    }
  }
}

module.exports = {
  submitAction,
  detailAction,
  buyAction,
  orderDetail,
  myOrder
}